//
//  ZBYLoginViewController.swift
//  ZBYBlog
//
//  Created by zby on 16/2/26.
//  Copyright © 2016年 zby. All rights reserved.
//

import UIKit
import AFNetworking
/*
1.成为微博的开发者
去open.weibo.com完善开发者信息
微连接，选择移动应用，创建一个app
完善应用信息（高级信息，测试信息）
记录一些应用信息

2.Token--Oauth认证
1.第一个接口文档：能够获取的数据就是code
2.第二个接口文档：

第一步：App提供一个网页
第二步：我们在网页里输入用户名和密码
第三步：服务器验证用户名和密码，然后返回一个code
第四步：App通过一定的方式来获取code
第五步：App通过这个code来向服务器请求换取token
第六步：服务器验证一下code，然后返回给App一个token
第七步：App可以通过Token来获取数据


Token是什么？
1.从服务器上获取数据，需要一定的权限
2.权限从哪里来？---登录之后，就有权限了
3.


api.weibo.com/oauth2/authorize?client_id=1114039734&redirect_uri=
http://www.baidu.com&response&response_type=code
*/
class ZBYLoginViewController: UIViewController,UIWebViewDelegate {

    //创建一个网页
    var webView : UIWebView?
    //在视图未加载完成前
    override func loadView() {
        //创建实例
        webView = UIWebView()
        //设置代理
        webView?.delegate = self
        //赋值
        view = webView
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        view.backgroundColor = UIColor.whiteColor()

        setUpNav()
        
        //设置请求url
        //这里url是个可选项，但是它的值是我自己写的，所以肯定有值，使用强制解包
        let url = NSURL(string: "https://api.weibo.com/oauth2/authorize?client_id=\(App_KEY)&redirect_uri=http://www.baidu.com&response&response_type=code")!
        //创建请求
        let request = NSURLRequest(URL: url)
        //加载请求
        webView?.loadRequest(request)
    }

    func setUpNav(){
        navigationItem.leftBarButtonItem = UIBarButtonItem(title: "返回", style: UIBarButtonItemStyle.Plain, target: self, action: "back")
        navigationItem.rightBarButtonItem = UIBarButtonItem(title: "自动补全", style: UIBarButtonItemStyle.Plain, target: self, action: "autofix")
    }

    func back(){
        dismissViewControllerAnimated(true) { () -> Void in
            
        }
    }
    
    func autofix(){
        
        //拼接js
        let js = "document.getElementById(\"userId\").value = \"13132167025\";document.getElementById(\"passwd\").value = \"coldplay2003\";"
        
        //注入到web页面
        webView?.stringByEvaluatingJavaScriptFromString(js)
    }
}

//webView的代理方法
extension ZBYLoginViewController{
    
    func webViewDidStartLoad(webView: UIWebView) {
        
    }
    
    func webViewDidFinishLoad(webView: UIWebView) {
        
    }
    
    func webView(webView: UIWebView, didFailLoadWithError error: NSError?) {
        
    }
    //只要我们加载网页的url，就会调用这个方法
    func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
        
        //先判断
        if let url = request.URL?.absoluteString{
            
            if url.hasPrefix(App_URL){
                
                if let code = request.URL?.query{
                    
                    print(code)
                    //获取我们需要的code
                    let subCode = code.substringFromIndex("code=".endIndex)
                    print(subCode)
                    
                    //获取token
                    loadToken(subCode)
                }
            }
        }
        return true
    }
    
}

extension ZBYLoginViewController{
    func loadToken(code: String){
        //实例化一个管理者
        let afn = AFHTTPSessionManager()
        //修改afn的接收类型
        afn.responseSerializer.acceptableContentTypes?.insert("text/plain")
        //发送post请求
        //参数
//        client_id	true	string	申请应用时分配的AppKey。
//        client_secret	true	string	申请应用时分配的AppSecret。
//        grant_type	true	string	请求的类型，填写authorization_code
//        
//        grant_type为authorization_code时
//        必选	类型及范围	说明
//        code	true	string	调用authorize获得的code值。
//        redirect_uri	true	string	回调地址，需需与注册应用里的回调地址一致
        let param = ["client_id" : App_KEY,
                     "client_secret" : App_SECERT,
                     "grant_type" : "authorization_code",
                     "code" : code,
                     "redirect_uri" : App_URL]
        afn.POST("https://api.weibo.com/oauth2/access_token", parameters: param, progress: nil, success: { (_ , JSON) -> Void in
            
            print("----------\(JSON)")
            
//            let dict = (NSDictionary )JSON?
            //JSON数据打印如下
//            ----------Optional({
//                "access_token" = "2.00I_WoWFoc55NB2c1d054ae1EIosID";
//                "expires_in" = 157679999;
//                "remind_in" = 157679999;
//                uid = 5065547506;
//            })
            

            //字典转模型
            if let Odic = JSON as? [String: NSObject]{
                let userModel = ZBYUserModel(dic: Odic)
                print(userModel.access_token)
                
                //获取个人信息
                self.getPersonInfo(userModel)
            }
            
            }) { (_ , error) -> Void in
                print("=========\(error)")
        }
    }
}

extension ZBYLoginViewController{
    func getPersonInfo(userModel: ZBYUserModel){
        
        let afn = AFHTTPSessionManager()
        
        let param = ["access_token": userModel.access_token ?? "",
                     "uid":userModel.uid ?? ""]
//        必选	类型及范围	说明
//        access_token	true	string	采用OAuth授权方式为必填参数，OAuth授权后获得。
//        uid	false	int64	需要查询的用户ID。
//        screen_name	false	string	需要查询的用户昵称。
        afn.GET("https://api.weibo.com/2/users/show.json", parameters: param, success: { (_, JSON) -> Void in
            print(JSON)
            if let dic = JSON as? [String: NSObject]{
                userModel.profile_image_url = dic["profile_image_url"] as? String
                userModel.screen_name = dic["srceen_name"] as? String
                
                userModel.save("info.aaaa")
            }
            }) { (_, error) -> Void in
                print(error)
        }
    }
}























